#!/bin/bash

# 定义变量
LOG_FILE="/var/log/auth.log"  # 对于CentOS和RHEL，请改为 /var/log/secure
BAN_TIME=86400  # 封禁时间，24小时（86400秒）
THRESHOLD=10  # 失败登录次数阈值
IPTABLES="/sbin/iptables"
BANNED_IP_LIST="/var/log/banned_ips.txt"  # 保存已封禁IP地址的列表

# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
  echo "请使用root权限运行此脚本"
  exit
fi

# 检查并封禁超出阈值的IP地址
check_and_ban_ips() {
  # 查找登录失败的IP地址并统计失败次数
  awk '/Failed password/ {print $(NF-3)}' $LOG_FILE | sort | uniq -c | while read count ip; do
    if [ "$count" -gt "$THRESHOLD" ]; then
      # 检查是否已经封禁
      if ! grep -q "$ip" $BANNED_IP_LIST; then
        echo "封禁IP: $ip (尝试失败次数: $count)"
        $IPTABLES -A INPUT -s $ip -j DROP
        echo $ip >> $BANNED_IP_LIST
        # 设置自动解封时间
        (sleep $BAN_TIME && $IPTABLES -D INPUT -s $ip -j DROP && sed -i "/$ip/d" $BANNED_IP_LIST) &
      fi
    fi
  done
}

# 运行监控和封禁IP
while true; do
  check_and_ban_ips
  sleep 60  # 每分钟检查一次
done
